/*
 * $Id: ReplaceWithHeadAction.java 488 2008-08-20 16:59:47Z rcleveng $
 * 
 * Copyright (c) 2001,2002 Boris Pruessmann and others. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Common Public License v0.5 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/cpl-v05.html
 * 
 * Contributors: Boris Pruessmann - Initial implementation.
 */
package net.sourceforge.perforce.ui.action;

import net.sourceforge.perforce.core.PerforceCorePlugin;
import net.sourceforge.perforce.core.PerforceException;
import net.sourceforge.perforce.core.internal.P4TeamProvider;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.action.IAction;
import org.eclipse.team.core.RepositoryProvider;

/**
 * @version $Revision: 488 $
 * @author <a href="mailto:bpruessmann@users.sourceforge.net">Boris
 *         Pruessmann</a>
 */
public class ReplaceWithHeadAction extends SyncToHeadAction {
  //----------------------------------------------------------------------------
  // -- Public Methods

  @Override
  public void run(IAction action) {
    // When replacing files, we first have to make them read-only in case the
    // client spec
    // doesn't allow writing to read-write files (noclobber)
    IResource[] resources = getSelectedResources();
    for (int i = 0; i < resources.length; i++) {
      IFile file = (IFile) resources[i];
      file.setReadOnly(true);
    }

    super.run(action);
  }

  // ---------------------------------------------------------------------------
  // Protected Methods

  @SuppressWarnings("unused")
  // PerforceException
  @Override
  protected boolean isEnabled() throws PerforceException {
    IResource[] resources = getSelectedResources();
    if (resources.length == 0) {
      return false;
    }

    for (int i = 0; i < resources.length; i++) {
      RepositoryProvider tempProvider = RepositoryProvider.getProvider(resources[i].getProject());
      if (tempProvider == null || !tempProvider.getID().equals(PerforceCorePlugin.getTypeId())) {
        return false;
      }

      P4TeamProvider provider = (P4TeamProvider) tempProvider;
      if (provider.isCheckedOut(resources[i])) {
        return false;
      }

      if (!provider.hasRemote(resources[i])) {
        return false;
      }
    }

    return true;
  }
}
